package com.cyan.note.dto.admin;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Map;

/**
 * 超级管理员系统统计响应DTO
 * 严格按照数据隔离原则 - 仅返回系统级统计数据，不包含业务数据
 * 
 * @author ZhangzhenYu
 * @since 2025-01-14
 */
@Data
public class SystemStatsResponse {

    /**
     * 统计时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime statsTime;

    /**
     * 店铺统计
     */
    private ShopStats shopStats;

    /**
     * 用户统计
     */
    private UserStats userStats;

    /**
     * 系统状态
     */
    private SystemStatus systemStatus;

    /**
     * 店铺统计数据
     */
    @Data
    public static class ShopStats {
        /**
         * 店铺总数
         */
        private Long totalCount;
        
        /**
         * 活跃店铺数
         */
        private Long activeCount;
        
        /**
         * 暂停店铺数
         */
        private Long suspendedCount;
        
        /**
         * 关闭店铺数
         */
        private Long closedCount;
        
        /**
         * 按状态分布
         */
        private Map<String, Long> statusDistribution;
    }

    /**
     * 用户统计数据
     */
    @Data
    public static class UserStats {
        /**
         * 用户总数（所有角色）
         */
        private Long totalUsers;
        
        /**
         * 超级管理员数量
         */
        private Long superAdminCount;
        
        /**
         * 店长数量
         */
        private Long managerCount;
        
        /**
         * 打手数量
         */
        private Long workerCount;
        
        /**
         * 激活用户数
         */
        private Long activeUsers;
        
        /**
         * 非激活用户数
         */
        private Long inactiveUsers;
        
        /**
         * 锁定用户数
         */
        private Long lockedUsers;
        
        /**
         * 按角色分布
         */
        private Map<String, Long> roleDistribution;
        
        /**
         * 按状态分布
         */
        private Map<String, Long> statusDistribution;
    }

    /**
     * 系统运行状态
     */
    @Data
    public static class SystemStatus {
        /**
         * 系统版本
         */
        private String version;
        
        /**
         * 系统启动时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime startTime;
        
        /**
         * 系统运行时长（毫秒）
         */
        private Long uptime;
        
        /**
         * JVM信息
         */
        private JvmInfo jvmInfo;
        
        /**
         * 数据库连接状态
         */
        private String databaseStatus;
    }

    /**
     * JVM信息
     */
    @Data
    public static class JvmInfo {
        /**
         * Java版本
         */
        private String javaVersion;
        
        /**
         * JVM名称
         */
        private String jvmName;
        
        /**
         * 最大内存（MB）
         */
        private Long maxMemory;
        
        /**
         * 总内存（MB）
         */
        private Long totalMemory;
        
        /**
         * 可用内存（MB）
         */
        private Long freeMemory;
        
        /**
         * 已使用内存（MB）
         */
        private Long usedMemory;
        
        /**
         * 内存使用率（%）
         */
        private Double memoryUsage;
    }
}